#define _CRT_SECURE_NO_WARNINGS  //scanf()的报错4996,必须放在最开头
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<time.h>

int main(void) {
	
	// 1. 读取文本内容
	FILE* fp = fopen("D:/编程练习/001_C++/C语言/test.txt", "r");
	if (!fp) return -1;									//文件打开失败
	char* words = (char*)malloc(sizeof(char) * 1024);	//开辟空间
	
	while (!feof(fp))			//判断是否到了文件结尾, 到了文件结尾返回 非0
	{
		memset(words, 0, 1024);								//初始化空间的值
		//中文文本为ANSI编码格式，不是UTF8
		fgets(words, 1024, fp);		//会自动读取 给定的N个 字符，直到遇见\n才停止，然后自动加上\0
		printf("%s", words);  
	}
	printf("\n");
	free(words);
	fclose(fp);

	//2. 写入文本内容
	FILE* fp2 = fopen("D:/编程练习/001_C++/C语言/test2.txt", "w");
	if(!fp2)return -1;									//打开失败
	char* words_writen = (char*)malloc(sizeof(char) * 1024);
	while (1) 
	{
		memset(words_writen, 0, 1024);					//初始化，清0
		scanf("%[^\n]", words_writen);					//使用正则方式获取空格，以\n为输入终结命令
		getchar();									//接受换行，防止卡死

		if (!strcmp(words_writen, "comm=exit"))		//输入停止命令
		{
			break;
		}

		strcat(words_writen, "\n");                //给这一行追加换行字符
		fputs(words_writen, fp2);						//写入
	}
	
	free(words_writen);
	fclose(fp2);

	system("pause");
	return 0;
}

//      另一种方式
//fscanf   每次读一行
//fprintf  每次写一行
//与fgets fputs相似
int main002(int argc, char* argv[]) 
{
	FILE* fp = fopen("D:/编程练习/001_C++/C语言/test3.txt","r");
	char ch[50];
	memset(ch, 0, 20);
	fscanf(fp,"%[^\n]", ch); //读取文件的行内容，可自动读取下一行
	printf("%s\n", ch);

	fclose(fp);
	system("pause");
	return 0;
}



